package com.btt.pattern.singleton.lazy;

/**
 * 饿汉式单例--静态内部类
 *
 * 特点：在外部类被调用的时候内部类才会被加载
 * 内部类一定要在方法调用之前初始化
 *
 * 这种形式兼顾饿汉式的内存浪费，也能兼顾synchronized性能问题
 * 像 RNG 一样的单例模式
 *
 * created by Btt on 2018/06/28
 */
public class LazyFour {

    private static boolean initialized = false;

    //加载LazyFour是不加载内部类的
    //只有在使用LazyFour的时候才初始化内部类

    private LazyFour(){

        synchronized (LazyFour.class){
            if(initialized == false){
                initialized = !initialized;
            }else {
                throw  new RuntimeException("单例已被入侵！");
            }
        }

    }

    public static final LazyFour getInstance(){
        return LazyHolder.LAZY;
    }

    private static final class LazyHolder{
        private static final LazyFour LAZY = new LazyFour();
    }
}
